package com.winning.algorithm.algorithmbank.hao19_03;

import java.util.HashSet;
import java.util.Set;

/**
 * @author Hao.Y
 *
 * 给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。
 * 输入: "abcbdec"
 * 输出: 3
 * 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
 *
 * ------1------ char = a
 * set[a]
 * i=0,j=0
 * max = max : ++j - i     1
 * ------2------ char = b
 * set[a,b]
 * i=0,j=1
 * max = max : ++j - i     2
 * ------3------ char = c
 * set[a,b,c]
 * i=0,j=2
 * max = max : ++j - i     3
 * ------4------ char = b
 * set[b,c]
 * i=1,j=3
 * ------5------ char = b
 * set[c]
 * i=2,j=3
 * ------6------ char = b
 * set[c,b]
 * i=2,j=3
 * max = max : ++j - i     2

 */
public class Demo_19_03 {

    public static void main(String[] args) {
        String input = "abcbdecbb";
        System.out.println(handle(input));
    }

    public static int handle(String input){
        if(input == null || input.length() <= 0){
            throw new RuntimeException("参数异常！");
        }

        int i=0,j=0,n=input.length();
        int max = 0;
        Set<Character> set = new HashSet<>();

        while(i<n && j<n){
            if(!set.contains(input.charAt(j))){
                set.add(input.charAt(j++));
                max = Math.max(max, j-i);
            }else{
                set.remove(input.charAt(i++));
            }
        }
        return max;
    }


}
